Virtualization has been gaining popularity in today's highly-connected economy. Enterprises see virtualization as an opportunity to maximize the efficiency and utilization of existing hardware resources, so that the enterprises can expand without unnecessary expenses for additional hardware when existing hardware is underutilized.
A virtual machine (VM) permits an isolated processing environment to exist on a physical machine (host), which may run an entirely different processing environment. A virtual machine monitor (VMM) or hypervisor is used to manage multiple VM's running on a single underlying host machine.
The processing state of a VM may be needed for a variety of reasons, such as: when a failure occurs with the VM, when a condition needs to be recreated, when work is to be check pointed, etc.
Currently, hypervisor products in the industry permit VM states to be saved at particular points in time (e.g., snapshots). This functionality has to be invoked via a hypervisor interface or via command line tools. In each instance, the industry products require access to the host machine when the VM state is to be saved.
However, if a user has access to a VM but not the host machine that runs the VM, then the user cannot save a state of his VM when desired. Another issue is that a user may want to programmatically save the VM state via VM applications being used or developed by the user; this cannot be done with existing approaches that require access to the hypervisor interface and proper access rights before the VM state can be saved. In a related problem, VM applications cannot take selective actions based on VM state changes because VM applications are not aware and are not permitted to be aware of VM state changes with existing products.
In fact, existing products require that a hypervisor be on the host machine before a VM state can be saved or changed. This is too inflexible and rigid for enterprises' VM needs and requirements.
Thus, improved techniques for managing VM states are needed.